package weibo

import (
	"bufio"
	"io"
	"log"
	"net/http"
	"net/http/cookiejar"
	"os"
	"strconv"
	"strings"
	"time"
)

//针对同一package下，全局定制初始化顺序
//
//
//

const maxValidate = 1

//Log
func init() {
	//layout必须为 "2006-01-02 15:04:05" 这个时间点
	logFile, err := os.Create("./weibo_" + time.Now().Format("2006-01-02") + ".log")
	if err != nil {
		panic(err)
	}
	//3个参数：日志文件，每条日志的前缀，日志属性
	logger = log.New(logFile, "weibo_", flag)

	std = log.New(os.Stdout, "weibo_", flag)
}

//PS
func init() {
	readLine("./weibo_ps.txt", func(line string) {
		if line != "" {
			tmp := strings.Split(line, "----")
			ps = append(ps, tmp)
			Info("ps", tmp)
		}
	})

}

func init() {
	for _index, tmp := range ps {
		//第一次client.Do登陆成功，获取cookies后，以后的执行client.Do就会带上cookies
		cookieJar, _ := cookiejar.New(nil)
		processor := &Processor{_index, &http.Client{Jar: cookieJar}, tmp[0], tmp[1], "", maxValidate}
		processors = append(processors, processor)
	}
}

//BaiduValidate
func init() {
	valClient = &ValidateClient{ApiKey: "h3oeOkH170ve0HXsH0sazMhr", SecretKey: "PRG0cIFvQ7dOU70Q7DL163kItn8lcXHd"}
	valClient.GetAccessToken()
}

//Sender
func init() {
	readLine("./weibo_tag.txt", func(line string) {
		if line != "" {
			content1 = append(content1, line)
		}
	})
	Info("content1: ", content1)
}

//以下是公共函数
//
//

func _panic(err error) {
	if err != nil {
		panic(err)
	}
}

//距离1970的秒
func Now() string {
	return strconv.Itoa(int(time.Now().Unix()))
}

//逐行读取
func readLine(filePath string, process func(string)) {
	f, err := os.Open(filePath) //OpenFile(name, O_RDONLY, 0)  只有只读权限
	defer f.Close()
	_panic(err)
	buf := bufio.NewReader(f)
	for {
		line, err := buf.ReadString('\n')
		if err != nil {
			if err == io.EOF {
				// 若文件末尾不是换行符
				line = strings.TrimSpace(line)
				process(line)
				return
			} else {
				panic(err)
			}
		}
		line = strings.TrimSpace(line)
		process(line)
	}
}

//文件flag
//O_RDONLY：read-only
//O_WRONLY：write-only
//O_RDWR：read-write
//O_APPEND：append
//O_CREATE：文件不存在就创建
//O_EXCL：与O_CREATE一起用，构成一个新建文件的功能，它要求文件必须不存在
//O_SYNC：同步方式打开，即不使用缓存，直接写入硬盘
//O_TRUNC：打开并清空文件
func writeFull(filePath string, content string) {
	f, err := os.OpenFile(filePath, os.O_WRONLY+os.O_TRUNC, os.ModePerm)
	defer f.Close()
	_panic(err)
	buf := bufio.NewWriter(f)
	_, err = buf.WriteString(content)
	_panic(err)
	buf.Flush()
}
